package com.sp.business.normalization.impl;

import java.util.UUID;

import org.apache.commons.lang.StringUtils;

import com.sp.generated.xml.firemon.NATRule;
import com.sp.generated.xml.firemon.StringProperty;

public class NormalizationUtil
{
//  public static UUID createFromBytes(byte[] b)
//  {
//    // We use common-lang's ArrayUtils.subarray() instead of Arrays.copyOfRange()
//    // since Arrays.copyOfRange() is JDK 1.6 only (LTP uses JDK 1.5)
//
//    StringBuilder sb = new StringBuilder(36);
//    sb.append(Util.hexDump(ArrayUtils.subarray(b, 0, 4))).append("-")
//        .append(Util.hexDump(ArrayUtils.subarray(b, 4, 6))).append("-").append(
//            Util.hexDump(ArrayUtils.subarray(b, 6, 8))).append("-").append(Util.hexDump(ArrayUtils.subarray(b, 8, 10)))
//        .append("-").append(Util.hexDump(ArrayUtils.subarray(b, 10, 16)));
//    return UUID.fromString(sb.toString());
//  }

//  public static byte[] generateRandomUUIDBytes()
//  {
//    return getUUIDBytes(UUID.randomUUID());
//  }
//
//  public static byte[] getUUIDBytes(String s)
//  {
//    UUID uuid = UUID.fromString(s);
//    return getUUIDBytes(uuid);
//  }

//  public static byte[] getUUIDBytes(UUID uuid)
//  {
//    if (uuid == null)
//    {
//      return null;
//    }
//
//    long lsbVal = uuid.getLeastSignificantBits();
//    long msbVal = uuid.getMostSignificantBits();
//
//    byte[] lsb = Util.getLongBytes(lsbVal);
//    byte[] msb = Util.getLongBytes(msbVal);
//
//    byte[] b = new byte[16];
//
//    System.arraycopy(msb, 0, b, 0, 8);
//    System.arraycopy(lsb, 0, b, 8, 8);
//    return b;
//  }

  public static boolean isStringUUID(String s)
  {
    if (StringUtils.isBlank(s))
    {
      return false;
    }

    try
    {
      String uuid = s;

      if (uuid.startsWith("{"))
      {
        uuid = uuid.substring(1);
      }

      if (uuid.endsWith("}"))
      {
        uuid = uuid.substring(0, uuid.length() - 1);
      }

      UUID.fromString(uuid);
    }
    catch (IllegalArgumentException ex)
    {
      return false;
    }
    return true;
  }

  public static String copyUID(NATRule previous, NATRule current)
  {
    String guid = null;

    if (previous != null)
      guid = previous.getUID();

    if (StringUtils.isBlank(guid) || !NormalizationUtil.isStringUUID(guid))
      guid = String.format("{%s}", UUID.randomUUID().toString().toUpperCase());

    current.setUID(guid);

    current.setXsid("NATRule" + guid.replaceAll("\\{", "").replaceAll("\\}", ""));

    return guid;
  }
//  public static String MD5(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException
//  {
//    MessageDigest md = MessageDigest.getInstance("MD5");
//    md.update(text.getBytes("iso-8859-1"), 0, text.length());
//    byte[] md5hash = md.digest();
//    UUID u = createFromBytes(md5hash);
//    return "{" + u.toString() + "}";
//  }
  
  public static String stripBraces(String guid)
  {
    if (guid == null)
      return null;

    return guid.replaceAll("\\{(.*?)\\}", "$1");
  }
  
  public static void main(String[] args)
  {
    System.out.println("generating random uuids...");
    for (int i=0; i<10; i++)
    {
      System.out.println(UUID.randomUUID());
    }
  }
  
  public static Integer length(final StringProperty sp)
  {
    if(sp != null && sp.getValue() != null)
    {
      return sp.getValue().length();
    }
    
    return 0;
  
  }
  
  public static String getValue(StringProperty sp)
  {
    if (sp != null)
      return sp.getValue();
    return null;
  }
}
